/**
 * Esta clase modela a la CPU (Sender) que envia los trabajos a las maquinas.
 */
package factory;

import eduni.simanim.Anim_port;
import eduni.simjava.Sim_entity;
import eduni.simjava.Sim_port;
import eduni.simjava.distributions.Sim_negexp_obj;

/**
 *
 * @author eagle
 */
public class Sender extends Sim_entity {

    private Sim_port first;
    private Sim_negexp_obj delay;
    private int max;

    /**
     *
     * @param name Nombre Entidad
     * @param max numero mensaje
     * @param hold Espera
     * @param x coordenada x
     * @param y coordenada y
     */
    public Sender(String name, int max, double hold, int x, int y) {
        super(name, "sender", x, y);
        first = new Sim_port("first", "port", Anim_port.RIGHT, 10);
        add_port(first);
        //Asumimos que el tiempo entre el envio de trabajos esta exponencialmente
        //distribuido. Calculamos la demora en consecuencia.

        /**
         * The constructor with which a specific seed is set for the random
         * number generator
         *
         * @param name The name to be associated with this instance
         * @param mean The mean of the exponential distribution
         * @param seed The initial seed for the generator, two instances with
         * the same seed will generate the same sequence of numbers
         */
        delay = new Sim_negexp_obj("", hold, (int) System.currentTimeMillis());
        this.max = max;
    }

    @Override
    public void body() {
        int i;
        double h;
        for (i = 0; i < max; i++) {
            sim_schedule(first, 0.0, 1);
            if (AppletFactory.show_msg) {
                //Se hace la traza para el envio del primer trabajo
                sim_trace(1, "S first J");
            }
            //Espera
            h = delay.sample();
            sim_hold(h > 0 ? h : 0.01);
        }
    }
}
